package fr.uniscol.dao.impl;

import java.util.List;

import org.springframework.stereotype.Repository;

import fr.uniscol.dao.IAnneeScolaireDao;
import fr.uniscol.dao.UniscolDaoSupport;
import fr.uniscol.dao.mapper.BaseAnneeScolaireRowMapper;
import fr.uniscol.model.BaseAnneeScolaire;
import fr.uniscol.model.EtablissementModel;
import static fr.uniscol.dao.impl.SQLNames.*;

@Repository("anneeScolaireDao")
public class AnneeScolaireDaoImpl extends UniscolDaoSupport implements IAnneeScolaireDao {

	@Override
	public BaseAnneeScolaire getBaseById(long baseId) {
		
		BaseAnneeScolaire base = (BaseAnneeScolaire) getJdbcTemplate().queryForObject("SELECT * FROM " + TABLE_BASE + " b, " 
            + TABLE_ETABLISSEMENT + " e, "
            + TABLE_UTILISATEURS + " u "
            + "WHERE b.etablissementid=e.etablissementid "
            + "AND b.baseid=? "
            + "AND u.id=b.administrateurid ", 
        new Object[]{
            baseId
        }, new BaseAnneeScolaireRowMapper());
        
        return base;
	}
	
	@Override
	public List<BaseAnneeScolaire> getAllBasesByEtablissement(EtablissementModel etablissement) {
		
		 List<BaseAnneeScolaire> bases = getJdbcTemplate().query("SELECT * FROM " 
                                                                        + TABLE_BASE + " b, " 
                                                                        + TABLE_ETABLISSEMENT + " e, "
                                                                        + TABLE_UTILISATEURS + " u "
                                                                        + "WHERE b.etablissementid=e.etablissementid "
                                                                        + " AND u.id=b.administrateurid "
                                                                        + " AND b.etablissementid=? ", 
             new Object[]{etablissement.getId()}, new BaseAnneeScolaireRowMapper());
        
        return bases;
	}
	
	public BaseAnneeScolaire getAnneeScolaire(EtablissementModel etablissement, int annee){
		
		BaseAnneeScolaire base = getJdbcTemplate().queryForObject("SELECT * FROM " + TABLE_BASE + " WHERE etablissementid=? AND annee=? ", 
									new Object[]{
										etablissement.getId(),
										annee
									}, new BaseAnneeScolaireRowMapper());
		
		return base;
	}

	@Override
	public boolean save(BaseAnneeScolaire annee){
		// TODO
		int rowsAffected = getJdbcTemplate().update("INSERT INTO " + TABLE_BASE + "(annee,etablissementid,date_creation,debut,fin) VALUES(?,?,CURDATE(),?,?)", 
				new Object[]{
						annee.getAnnee(), 
						annee.getEtablissement().getId(),
						annee.getCalendrier().getDebut().getTime(),
						annee.getCalendrier().getFin().getTime()
					});
		
		return rowsAffected == 1;
	}

	@Override
	public boolean deleteAnneeScolaire(BaseAnneeScolaire base) {
		
		int rowsAffected = getJdbcTemplate().update("DELETE FROM " + TABLE_BASE + " WHERE baseid=?", 
				new Object[]{
						base.getId()
					});
		
		return rowsAffected == 1;
	}
}
